document.addEventListener('DOMContentLoaded', () => { // Обработка всех форм с классом mail-form document.querySelectorAll('form.mail-form').forEach(form => { // Отключаем стандартную валидацию браузера form.setAttribute('novalidate', true); // Создаем контейнер для сообщений формы const messageContainer = document.createElement('div'); messageContainer.className = 'form-message'; form.insertBefore(messageContainer, form.firstChild); // Обработчик отправки формы form.addEventListener('submit', async (e) => { e.preventDefault(); clearFormMessages(form); // Запускаем кастомную валидацию const isValid = validateForm(form); if (isValid) { await submitForm(form, messageContainer); } }); // Живая валидация при изменении полей form.querySelectorAll('input, textarea, select').forEach(field => { field.addEventListener('input', () => { clearFieldError(field); validateField(field); }); }); }); // Функция валидации всей формы function validateForm(form) { let isValid = true; form.querySelectorAll('input, textarea, select').forEach(field => { if (!validateField(field)) { isValid = false; } }); return isValid; } // Валидация отдельного поля function validateField(field) { const value = field.value.trim(); let isValid = true; let errorMessage = ''; // Проверка обязательных полей if (field.hasAttribute('required') && !value) { errorMessage = field.dataset.errorRequired || 'Câmp obligatoriu.'; isValid = false; } // Валидация email if (isValid && field.type === 'email' && value) { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(value)) { errorMessage = field.dataset.errorEmail || 'Email incorect'; isValid = false; } } // Валидация телефона if (isValid && field.type === 'tel' && value) { const digits = value.replace(/\D/g, ''); if (digits.length < 6) { errorMessage = field.dataset.errorTel || 'Număr de telefon incorect'; isValid = false; } } // Валидация по pattern if (isValid && field.pattern && value) { const regex = new RegExp(field.pattern); if (!regex.test(value)) { errorMessage = field.dataset.errorPattern || field.title || 'Format incorect'; isValid = false; } } // Показ ошибки if (!isValid) { showFieldError(field, errorMessage); } return isValid; } // Показать ошибку поля внутри .input-wrap function showFieldError(field, message) { // Добавляем класс ошибки к полю field.classList.add('field-error'); // Находим контейнер .input-wrap const inputWrap = field.closest('.input-wrap'); // Если контейнер найден, добавляем ошибку туда if (inputWrap) { // Удаляем старые ошибки для этого поля const existingError = inputWrap.querySelector('.error-text'); if (existingError) existingError.remove(); // Создаем элемент ошибки const errorElement = document.createElement('div'); errorElement.className = 'error-text'; errorElement.textContent = message; inputWrap.appendChild(errorElement); } else { // Если .input-wrap не найден, добавляем после поля (резервный вариант) const errorElement = document.createElement('div'); errorElement.className = 'error-text'; errorElement.textContent = message; field.parentNode.insertBefore(errorElement, field.nextSibling); } } // Очистить ошибку поля function clearFieldError(field) { // Убираем класс ошибки field.classList.remove('field-error'); // Находим контейнер .input-wrap const inputWrap = field.closest('.input-wrap'); if (inputWrap) { // Удаляем сообщение об ошибке внутри .input-wrap const errorElement = inputWrap.querySelector('.error-text'); if (errorElement) errorElement.remove(); } else { // Резервный вариант: удаляем следующий элемент const errorElement = field.nextElementSibling; if (errorElement && errorElement.classList.contains('error-text')) { errorElement.remove(); } } } // Очистить все сообщения формы function clearFormMessages(form) { // Очищаем ошибки полей form.querySelectorAll('.field-error').forEach(field => { field.classList.remove('field-error'); }); // Удаляем все сообщения об ошибках внутри .input-wrap form.querySelectorAll('.input-wrap .error-text').forEach(el => el.remove()); // Удаляем сообщения вне .input-wrap (резервные) form.querySelectorAll('.error-text').forEach(el => el.remove()); // Скрываем глобальное сообщение const messageContainer = form.querySelector('.form-message'); if (messageContainer) { messageContainer.textContent = ''; messageContainer.className = 'form-message'; messageContainer.style.display = 'none'; } } // Отправка формы async function submitForm(form, messageContainer) { const formData = new FormData(form); const submitButton = form.querySelector('[type="submit"]'); const originalText = submitButton.innerHTML; // Блокируем кнопку submitButton.innerHTML = 'Sending...'; submitButton.disabled = true; try { const response = await fetch('form.php', { method: 'POST', body: formData }); const result = await response.json(); messageContainer.textContent = result.message || ''; messageContainer.style.display = 'block'; if (result.success) { messageContainer.classList.add('success'); form.reset(); // Автоскрытие успешного сообщения setTimeout(() => { messageContainer.style.display = 'none'; }, 5000); } else { messageContainer.classList.add('error'); } } catch (error) { messageContainer.textContent = 'Error: ' + error.message; messageContainer.classList.add('error'); messageContainer.style.display = 'block'; } finally { // Разблокируем кнопку submitButton.innerHTML = originalText; submitButton.disabled = false; } } }); const employees = document.querySelector("#employees") noUiSlider.create(employees, { start: 1300, connect: [true, false], tooltips: { to: function(value) { return Math.trunc(value) + "RON" } }, range: { 'min': 1300, '50%': 15000, 'max': 25000 }, pips: { mode: 'steps', filter: function (value, type) { return type === 0 ? -1 : 1; }, format: { to: function (value) { return value + "RON"; } } } }); var calc_result = document.getElementById('calc_result'); employees.noUiSlider.on('update', function (values, handle) { calc_result.innerHTML = Math.trunc(values[handle] * 1.60) + "RON"; }); $(document).ready(function() { $('.burger').click(function(event) { $(this).toggleClass('active'); $('.header_nav').toggleClass('active'); }); }); //select open $(document).ready(function() { const btnOk = document.querySelector('.video_play'); const wrapperVideo = document.getElementById('video'); btnOk.addEventListener('click',function(){ wrapperVideo.play(); $(this).hide(); }); }); //Плавный скрол по секциям $(document).ready(function() { $('.header_nav_item,.scroll').click(function(){ var el = $(this).attr('href'); $('html,body').animate({ scrollTop: $(el).offset().top - 100} , 1000); return false; }); }); $(document).ready(function() { //1 time1 = Date.now(); time1_minus = time1 + 500; time1_minus_time = new Date(time1_minus); result1 = time1_minus_time.toLocaleTimeString(); $('#item12').html(result1); //2 time2_minus = time1_minus + 4000; time2_minus_time = new Date(time2_minus); result2 = time2_minus_time.toLocaleTimeString(); $('#item11').html(result2); //3 time3_minus = time2_minus + 4000; time3_minus_time = new Date(time3_minus); result3 = time3_minus_time.toLocaleTimeString(); $('#item10').html(result3); //4 time4_minus = time3_minus + 4000; time4_minus_time = new Date(time4_minus); result4 = time4_minus_time.toLocaleTimeString(); $('#item9').html(result4); //5 time5_minus = time4_minus + 4000; time5_minus_time = new Date(time5_minus); result5 = time5_minus_time.toLocaleTimeString(); $('#item8').html(result5); //6 time6_minus = time5_minus + 4000; time6_minus_time = new Date(time6_minus); result6 = time6_minus_time.toLocaleTimeString(); $('#item7').html(result6); //7 time7_minus = time6_minus + 4000; time7_minus_time = new Date(time7_minus); result7 = time7_minus_time.toLocaleTimeString(); $('#item6').html(result7); //8 time8_minus = time7_minus + 4000; time8_minus_time = new Date(time8_minus); result8 = time8_minus_time.toLocaleTimeString(); $('#item5').html(result8); //9 time9_minus = time8_minus + 4000; time9_minus_time = new Date(time9_minus); result9 = time9_minus_time.toLocaleTimeString(); $('#item4').html(result9); //10 time10_minus = time9_minus + 4000; time10_minus_time = new Date(time10_minus); result10 = time10_minus_time.toLocaleTimeString(); $('#item3').html(result10); //11 time11_minus = time10_minus + 4000; time11_minus_time = new Date(time11_minus); result11 = time11_minus_time.toLocaleTimeString(); $('#item2').html(result11); //12 time12_minus = time11_minus + 4000; time12_minus_time = new Date(time12_minus); result12 = time12_minus_time.toLocaleTimeString(); $('#item1').html(result12); }); $('.feedback_slider').slick({ infinite: true, slidesToShow: 1, slidesToScroll: 1, prevArrow: '', nextArrow: '', }); //Плавный скрол по секциям $(document).ready(function() { $('.faq_item').click(function(){ $(this).find('.faq_answer').toggle(400); $(this).toggleClass('active'); }); }); function getTimeRemaining(endtime) { var t = Date.parse(endtime) - Date.parse(new Date()); var seconds = Math.floor((t / 1000) % 60); var minutes = Math.floor((t / 1000 / 60) % 60); var hours = Math.floor((t / (1000 * 60 * 60)) % 24); var days = Math.floor(t / (1000 * 60 * 60 * 24)); return { total: t, days: days, hours: hours, minutes: minutes, seconds: seconds }; } function initializeClock(id, endtime) { var clock = document.getElementById(id); var daysSpan = clock.querySelector(".days"); var hoursSpan = clock.querySelector(".hours"); var minutesSpan = clock.querySelector(".minutes"); var secondsSpan = clock.querySelector(".seconds"); function updateClock() { var t = getTimeRemaining(endtime); if (t.total <= 0) { document.getElementById("countdown").className = "hidden"; document.getElementById("deadline-message").className = "visible"; clearInterval(timeinterval); return true; } daysSpan.innerHTML = t.days; hoursSpan.innerHTML = ("0" + t.hours).slice(-2); minutesSpan.innerHTML = ("0" + t.minutes).slice(-2); secondsSpan.innerHTML = ("0" + t.seconds).slice(-2); } updateClock(); var timeinterval = setInterval(updateClock, 1000); } //var deadline = "January 01 2018 00:00:00 GMT+0300"; //for Ukraine var deadline = new Date(Date.parse(new Date()) + 15 * 999 * 59 * 59); // for endless timer initializeClock("countdown", deadline); $(document).mouseleave(function(e){ if (e.clientY < 10) { $('.popup').show(); } }); $(document).ready(function() { $('.popup_item_btn').click(function(){ $('.popup').remove(); $('.quiz').show(); }); }); $(document).ready(function() { $('.popup_item_close').click(function(){ $('.popup').remove(); }); }); $(document).ready(function() { $('.quiz_btn').click(function(){ $('.quiz').hide(); $('.modal_form').show(); }); }); $(document).ready(function() { $('.close').click(function(){ $('.modal_form').hide(); }); }); $(window).scroll(function() { var the_top = $(document).scrollTop(); cPos = $('#calc').offset().top; if (the_top > cPos) { all(); } else {} }); function all() { function item1() { $('.earn_table_item:last-child').addClass('active'); } function item2() { $('.earn_table_item:nth-child(8)').addClass('active'); } function item3() { $('.earn_table_item:nth-child(7)').addClass('active'); } function item4() { $('.earn_table_item:nth-child(6)').addClass('active'); } function item5() { $('.earn_table_item:nth-child(5)').addClass('active'); } function item6() { $('.earn_table_item:nth-child(4)').addClass('active'); } function item7() { $('.earn_table_item:nth-child(3)').addClass('active'); } function item8() { $('.earn_table_item:nth-child(2)').addClass('active'); } function item9() { $('.earn_table_item:first-child').addClass('active'); } setTimeout(item1, 500); setTimeout(item2, 4500); setTimeout(item3, 8500); setTimeout(item4, 12500); setTimeout(item5, 16500); setTimeout(item6, 20500); setTimeout(item7, 24500); setTimeout(item8, 28500); setTimeout(item9, 30000); }